package main

import (
	"bytes"
	"encoding/binary"
	"fmt"
)

func main() {
	var n int = 10000
	intToBytes := IntToBytes(n)
	fmt.Println("========= int to bytes ===========")
	fmt.Println(intToBytes)
	// TestBufferString()

	// // write
	// BufferWrite()
	// // Read
	Read()
}

func IntToBytes(n int) []byte {
	x := int32(n)
	bytesBuffer := bytes.NewBuffer([]byte{})
	binary.Write(bytesBuffer, binary.BigEndian, x)
	return bytesBuffer.Bytes()
}

func TestBufferString() {
	buf1 := bytes.NewBufferString("swift")
	buf2 := bytes.NewBuffer([]byte("swift"))
	buf3 := bytes.NewBuffer([]byte{'s', 'w', 'i', 'f', 't'})
	fmt.Println("===========以下buf1,buf2,buf3等效=========")
	fmt.Println("buf1:", buf1)
	fmt.Println("buf2:", buf2)
	fmt.Println("buf3:", buf3)
	fmt.Println("===========以下创建空的缓冲器等效=========")
	buf4 := bytes.NewBufferString("")
	buf5 := bytes.NewBuffer([]byte{})
	fmt.Println("buf4:", buf4)
	fmt.Println("buf5:", buf5)
}

func BufferWrite() {
	fmt.Println("===========以下通过Write把swift写入Learning缓冲器尾部=========")
	newBytes := []byte("swift ")
	// 创建一个内容 Learning 的缓存区
	buf := bytes.NewBuffer([]byte("Learning"))
	fmt.Println(buf.String())
	// 将 newBytes 这个 slice 写到 buf 的尾部
	buf.Write(newBytes)
	fmt.Println(buf.String())
}

func Read() {
	bufs := bytes.NewBufferString("Learning swift.")
	fmt.Println(bufs.String())
	// 申明一个空的 slice， 容量为 8
	l := make([]byte, 8)
	// 把 bufs 的内容如如到 l 内，因为 l 的容量为 8，所以只能读过来 8 个
	bufs.Read(l)
	fmt.Println("::bufs缓冲器内容::")
	fmt.Println(bufs.String())
	//空的l被写入了8个字符,所以为 Learning
	fmt.Println("::l的slice内容::")
	fmt.Println(string(l))
	//把bufs的内容读入到l内,原来的l的内容被覆盖了
	bufs.Read(l)
	fmt.Println("::bufs缓冲器被第二次读取后剩余的内容::")
	fmt.Println(bufs.String())
	fmt.Println("::l的slice内容被覆盖,由于bufs只有7个了,因此最后一个g被留下来了::")
	fmt.Println(string(l))
}
